import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

export const useUserStore = defineStore('user', {
  // 使用选项式API形式，方便序列化
  state: () => ({
    // 用户登录状态
    isLoggedIn: localStorage.getItem('isLoggedIn') === 'true',
    // 登录Token
    token: localStorage.getItem('token') || '',
    // 管理员信息
    admin: JSON.parse(localStorage.getItem('adminInfo') || '{}'),
    // 最后登录时间
    lastLoginTime: localStorage.getItem('lastLoginTime') || '',
  }),

  getters: {
    // 是否已登录
    loggedIn: (state) => state.isLoggedIn && !!state.token,
    // 获取管理员姓名
    adminName: (state) => state.admin?.name || state.admin?.username || '未知用户',
    // 获取管理员角色
    adminRole: (state) => state.admin?.role || '',
    // 格式化的最后登录时间
    formattedLastLogin: (state) => {
      if (!state.lastLoginTime) return '从未登录';
      return new Date(state.lastLoginTime).toLocaleString('zh-CN', { 
        year: 'numeric', 
        month: '2-digit', 
        day: '2-digit', 
        hour: '2-digit', 
        minute: '2-digit', 
        second: '2-digit' 
      });
    }
  },

  actions: {
    // 设置登录信息
    setLoginInfo(loginData) {
      // 保存登录状态
      this.isLoggedIn = true;
      
      // 保存Token
      if (loginData.token) {
        this.token = loginData.token;
      }
      
      // 保存管理员信息
      if (loginData.admin) {
        this.admin = loginData.admin;
      }
      
      // 记录登录时间
      this.lastLoginTime = new Date().toISOString();
    },
    
    // 登出
    logout() {
      this.isLoggedIn = false;
      this.token = '';
      this.admin = {};
      this.lastLoginTime = '';
    }
  },
  
  // 持久化配置
  persist: {
    // 启用
    enabled: true,
    // 存储方式
    strategies: [
      {
        // 使用localStorage
        storage: localStorage,
        // 需要持久化的字段
        paths: ['isLoggedIn', 'token', 'admin', 'lastLoginTime']
      }
    ]
  }
}) 